/**
 * class pineapple.Test
 *
 * March 28, 2012 
 * @authors Roman Kotusev, Darjuš Ilcevič, Kristis Vaškys
 */
package pineapple;

public class Test {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        Memory memory = new Memory();        
        PagingDevice paging = new PagingDevice(memory);
        final RealMachineModel GUI = new RealMachineModel();
        ChannelDevice channel = new ChannelDevice(GUI);
        Processor processor = new Processor(memory,channel);
        ////////////////////////////////////
         /*
         * Set the Nimbus look and feel
         */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /*
         * If Nimbus (introduced in Java SE 6) is not available, stay with the
         * default look and feel. For details see
         * http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(RealMachineModel.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(RealMachineModel.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(RealMachineModel.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(RealMachineModel.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /*
         * Create and display the form
         */
        java.awt.EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                GUI.setVisible(true);
            }
        });
        ////////////////////////////////////////
        paging.reserveMemory(processor);
        System.out.println(processor.getPCS() + " " + processor.getPDS() + " " + processor.getPSS());
        VirtMachine machine = new VirtMachine(processor, GUI);

        while (true){
            machine.checkData(channel.getFilePath());
            machine.loadData();
            machine.executeCode();
            machine.closeMachine();
        }
    }
}
